import { createRouter, createWebHistory } from 'vue-router'

/* Layout */
import Layout from '../layout/index.vue'

/**
 * Note: 路由配置项
 *
 * hidden: true                     // 当设置 true 的时候该路由不会在侧边栏出现 如401，login等页面，或者如一些编辑页面/edit/1
 * alwaysShow: true                 // 当你一个路由下面的 children 声明的路由大于1个时，自动会变成嵌套的模式--如组件页面
 *                                  // 只有一个时，会将那个子路由当做根路由显示在侧边栏--如引导页面
 *                                  // 若你想不管路由下面的 children 声明的个数都显示你的根路由
 *                                  // 你可以设置 alwaysShow: true，这样它就会忽略之前定义的规则，一直显示根路由
 * redirect: noRedirect             // 当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
 * name:'router-name'               // 设定路由的名字，一定要填写不然使用<keep-alive>时会出现各种问题
 * meta : {
    roles: ['admin','editor']      // 设置该路由进入的权限，支持多个权限叠加
    title: 'title'                 // 设置该路由在侧边栏和面包屑中展示的名字
    icon: 'svg-name'               // 设置该路由的图标，对应路径src/icons/svg
    breadcrumb: false              // 如果设置为false，则不会在breadcrumb面包屑中显示
    activeMenu: '/system/user'     // 当路由设置了该属性，则会高亮相对应的侧边栏。
  }
 */

// 公共路由
export const constantRoutes = [
  {
    path: '/',
    component: Layout,
    redirect: '/dashboard',
    children: [
      {
        path: '/dashboard',
        component: () => import('@/views/dashboard/index.vue'),
        name: 'Dashboard',
        meta: { 
          title: '仪表盘', 
          icon: 'dashboard',
          affix: true  // 添加必须的meta字段
        }
      }
    ]
  },
  {
    path: '/login',
    component: () => import('../views/login/index.vue'),
    hidden: true
  },

  // 设备管理路由（其他路由同理）
  {
    path: '/device',
    component: Layout,
    redirect: '/device/index', // 确保存在重定向
    name: 'Device',
    alwaysShow: true,
    meta: { title: '设备管理', icon: 'Monitor' },
    children: [
      {
        path: 'index',
        component: () => import('../views/device/index.vue'),
        name: 'DeviceList',
        meta: { title: '设备列表', icon: 'Monitor' }
      },
      {
        path: 'group',
        component: () => import('../views/device/group.vue'),
        name: 'DeviceGroup',
        meta: { title: '设备组管理', icon: 'Folder' }
      },
      {
        path: 'data/:id',
        component: () => import('../views/device/data.vue'),
        name: 'DeviceData',
        meta: { title: '设备数据', icon: 'DataLine' },
        hidden: true
      }
    ]
  },
  // 数据管理路由
  {
    path: '/data',
    component: Layout,
    redirect: '/data/statistics',
    name: 'Data',
    alwaysShow: true, // 新增该属性
    meta: { title: '数据管理', icon: 'DataLine' },
    children: [
      {
        path: 'statistics',
        component: () => import('../views/dashboard/index.vue'),
        name: 'Statistics',
        meta: { title: '数据统计', icon: 'PieChart' }
      },
      {
        path: 'alarm',
        component: () => import('../views/dashboard/index.vue'),
        name: 'Alarm',
        meta: { title: '告警管理', icon: 'Warning' }
      }
    ]
  },
  // 系统管理路由
  {
    path: '/system',
    component: Layout,
    redirect: '/system/user',
    name: 'System',
    alwaysShow: true, // 新增该属性
    meta: { title: '系统管理', icon: 'setting' },
    children: [
      {
        path: 'user',
        name: 'User',
        component: () => import('@/views/system/user/index.vue'), // [!code ++]
        meta: { title: '用户管理', icon: 'user' }
      },
      {
        path: 'role',
        name: 'Role',
        component: () => import('../views/system/role/index.vue'),
        meta: { title: '角色管理', icon: 'eye' }
      },
      {
        path: 'permission',
        name: 'Permission',
        component: () => import('../views/system/permission/index.vue'),
        meta: { title: '菜单管理', icon: 'list' }
      },
      {
        path: 'monitor',
        name: 'Monitor',
        component: () => import('../views/system/monitor.vue'),
        meta: { title: '系统监控', icon: 'monitor' }
      },
      {
        path: 'logs',
        name: 'Logs',
        component: () => import('../views/system/logs.vue'),
        meta: { title: '操作日志', icon: 'document' }
      },
      {
        path: 'config',
        name: 'Config',
        component: () => import('../views/system/config.vue'),
        meta: { title: '参数配置', icon: 'setting' }
      },
      {
        path: 'dict',
        name: 'Dict',
        component: () => import('../views/system/dict/index.vue'),
        meta: { title: '字典管理', icon: 'collection' }
      },
      {
        path: 'dict/data/:id',
        name: 'DictData',
        component: () => import('../views/system/dict/data.vue'),
        meta: { title: '字典数据', icon: 'ticket', activeMenu: '/system/dict' },
        hidden: true
      },
      {
        path: 'profile/index',
        name: 'index',
        // 修正组件导入路径
        component: () => import('../views/system/profile/index.vue'),
        meta: { 
          title: '个人中心', 
          icon: 'user',
          // 添加激活菜单配置
          activeMenu: '/system/profile'
        },
        hidden: true
      }
    ]
  },
  // 404 页面必须放在最后
  {
    path: '/404',
    component: () => import('../views/error/404.vue'),
    hidden: true
  },
]

const router = createRouter({
  history: createWebHistory(),
  routes: constantRoutes,
  scrollBehavior: () => ({ top: 0 })
})

// 新增路由重置方法
export function resetRouter() {
  const newRouter = createRouter({
    history: createWebHistory(),
    routes: constantRoutes
  })
  router.matcher = newRouter.matcher // 重置路由匹配器
}

export default router 